import AutoImport from 'unplugin-auto-import/vite'          //自动按需引入 vue\vue-router\pinia 等的api
import Components from 'unplugin-vue-components/vite'       //自动按需引入 第三方的组件库组件 和 我们自定义的组件
import VueSetupExtend from 'vite-plugin-vue-setup-extend'   //可以直接在setup语法糖种写name

import { defineConfig } from 'vite'
import { ElementPlusResolver, VueUseComponentsResolver } from 'unplugin-vue-components/resolvers'

import { fileURLToPath, URL } from 'node:url'

import vue from '@vitejs/plugin-vue'

import unocss from 'unocss/vite'

import { visualizer } from 'rollup-plugin-visualizer'

// https://vitejs.dev/config/
export default defineConfig({

    base: "./",
    plugins: [
        vue(),
        // 
        AutoImport({
            dts: './src/auto-imports.d.js',
            imports: ['vue', 'pinia', 'vue-router', '@vueuse/core'],
            resolvers: [ElementPlusResolver()],
        }),


        Components({
            dts: './src/components.d.js',
            // imports 指定组件所在位置，默认为 src/components
            dirs: ['src/components/'],
            resolvers: [ElementPlusResolver(), VueUseComponentsResolver()],
        }),

        // 使用unocss
        unocss(),

        // 扩展setup插件，支持在script标签中使用name属性
        VueSetupExtend(),

        // 打包依赖分析插件
        visualizer({
            emitFile: false,
            file: "stats.html", //分析图生成的文件名
            open: true //如果存在本地服务端口，将在打包后自动展示
        })
    ],


    // alias 别名
    resolve: {
        alias: {
            '@': fileURLToPath(new URL('./src', import.meta.url))
        }
    },


    // css配置
    css: {
        preprocessorOptions: {
            scss: {
                additionalData: `
            @import "@/assets/css/variable.scss";
          `,
                javascriptEnabled: true,
            },
        },
    },


    // 服务代理设置
    server: {
        host: true, // host设置为true才可以使用network的形式，以ip访问项目
        port: 8080, // 端口号
        open: true, // 自动打开浏览器
        cors: true, // 跨域设置允许
        strictPort: true, // 如果端口已占用直接退出
        // 接口代理
        proxy: {
            '/api': {
                // 本地 8000 前端代码的接口 代理到 8888 的服务端口
                target: 'https://mock.apifox.cn/m1/1776941-0-default/v1/api',
                changeOrigin: true, // 允许跨域
                rewrite: (path) => path.replace('/api/', '/'),
            },
        },
    },

    // build 配置
    build: {
        brotliSize: false,
        // 消除打包大小超过500kb警告
        chunkSizeWarningLimit: 2000,
        // 在生产环境移除console.log
        terserOptions: {
            compress: {
                drop_console: false,
                pure_funcs: ['console.log', 'console.info'],
                drop_debugger: true,
            },
        },
        assetsDir: 'static/assets',
        // 静态资源打包到dist下的不同目录
        rollupOptions: {
            output: {
                chunkFileNames: 'static/js/[name]-[hash].js',
                entryFileNames: 'static/js/[name]-[hash].js',
                assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
            },
        },
    },
})
